home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MATH / NRPAS13 / FACTRL.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-29  |  663b  |  27 lines

  1. FUNCTION factrl(n: integer): real;
  2. (* Programs using routing FACTRL must declare the variables
  3. VAR
  4.    glntop: integer;
  5.    gla: ARRAY [1..33] OF real;
  6. and initialize the values
  7.    glntop := 0;
  8.    gla[1] := 1.0;
  9. in the main routine. *)
  10. VAR
  11.    j: integer;
  12. BEGIN
  13.    IF  (n < 0)  THEN BEGIN
  14.       writeln('pause in FACTRL - negative factorial'); readln END
  15.    ELSE IF (n <= glntop) THEN BEGIN
  16.       factrl := gla[n+1] END
  17.    ELSE IF (n <= 32) THEN BEGIN
  18.       FOR j := glntop+1 TO n DO BEGIN
  19.          gla[j+1] := j*gla[j]
  20.       END;
  21.       glntop := n;
  22.       factrl := gla[n+1]
  23.    END ELSE BEGIN
  24.       factrl := exp(gammln(n+1.0))
  25.    END
  26. END;
  27.